package com.hc.server.user.domain.entity;


import java.io.Serializable;

import java.util.Date;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;

/**
* 用户表
* @TableName user
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "user", autoResultMap = true)
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 系统uid
     */
    public static Long UID_SYSTEM = 1L;

    /**
    * 用户id
    */
    @ApiModelProperty("用户id")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    /**
    * 用户昵称
    */
    @ApiModelProperty("用户昵称")
    @TableField("name")
    private String name;
    /**
    * 用户头像
    */
    @ApiModelProperty("用户头像")
    @TableField("avatar")
    private String avatar;
    /**
    * 性别 1为男性，2为女性
    */
    @TableField("sex")
    @ApiModelProperty("性别 1为男性，2为女性")
    private Integer sex;
    /**
    * 微信openid用户标识
    */
    @TableField("open_id")
    @ApiModelProperty("微信openid用户标识")
    private String openId;
    /**
    * 在线状态 1在线 2离线
    */
    @ApiModelProperty("在线状态 1在线 2离线")
    @TableField("active_status")
    private Integer activeStatus;
    /**
    * 最后上下线时间
    */
    @ApiModelProperty("最后上下线时间")
    @TableField("last_opt_time")
    private Date lastOptTime;
    /**
    * ip信息
    */
    @ApiModelProperty("ip信息")
    @TableField(value = "ip_info", typeHandler = JacksonTypeHandler.class)
    private IpInfo ipInfo;
    /**
    * 佩戴的徽章id
    */
    @ApiModelProperty("佩戴的徽章id")
    @TableField("item_id")
    private Long itemId;
    /**
    * 使用状态 0.正常 1拉黑
    */
    @TableField("status")
    @ApiModelProperty("使用状态 0.正常 1拉黑")
    private Integer status;
    /**
    * 创建时间
    */
    @TableField("create_time")
    @ApiModelProperty("创建时间")
    private Date createTime;
    /**
    * 修改时间
    */
    @TableField("update_time")
    @ApiModelProperty("修改时间")
    private Date updateTime;

    public void refreshIp(String ip) {
        if (ipInfo == null) {
            ipInfo = new IpInfo();
        }
        ipInfo.refreshIp(ip);
    }
}
